home *** CD-ROM | disk | FTP | other *** search
/ Internet Tools (InfoMagic) / Internet Tools.iso / dos_win / winsock / maillist / 94-05.Z / 94-05 / 000234_news@bigblue.oit.unc.edu_Sat May 17 05:31:09 1994.msg < prev    next >
Internet Message Format  |  1994-05-31  |  16KB

  1. Received: from bigblue.oit.unc.edu by SunSITE.Unc.EDU (5.65c+IDA/FvK-1.07) with SMTP
  2.           id AB08502; Wed, 18 May 1994 17:55:12 -0400
  3. Received: by bigblue.oit.unc.edu (AIX 3.2/UCB 5.64/4.03)
  4.           id AA16868; Wed, 18 May 1994 17:42:58 -0400
  5. Received: from GATEWAY by bigblue with netnews
  6.     for winsock@sunsite.unc.edu (winsock@sunsite.unc.edu)
  7. To: winsock@sunsite.unc.edu
  8. Date: 17 May 1994 05:31:09 GMT
  9. From: swelch@nmsu.edu (Scott E. Welch)
  10. Message-Id: <2r9kqt$qlm@dns1.NMSU.Edu>
  11. Organization: New Mexico State University, Las Cruces, NM
  12. Sender: ses
  13. Subject: Need help getting started
  14.  
  15. I am having problems getting up to speed with Windows Sockets.  For
  16. starters I am trying to send a packet from one place to another.  The
  17. recv() and recvfrom() functions seem to wait infinitely.  The send() and
  18. sendto() function always returns with WSAEINVAL.
  19.  
  20. swelch@nmsu.edu
  21.  
  22. --- cut ----
  23.  
  24.  
  25. //GetProfileString()
  26.  
  27. #include <windows.h>
  28. #define _INC_WINDOWS
  29. #include <winsock.h>
  30.  
  31. WSADATA wsaData;
  32.  
  33. void SocketError ( char *,int );
  34. long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
  35. unsigned char OpenWinsock ( void );
  36. unsigned char BodyWinsock ( void );
  37. void CloseWinsock ( void );
  38. char appname[40];
  39.  
  40. int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
  41.     int nCmdShow)
  42. {
  43.     static char szAppName[]="sock";
  44.     HWND hwnd;
  45.     MSG msg;
  46.     WNDCLASS wndclass;
  47.  
  48.     if(OpenWinsock()) return(0);
  49.  
  50.     if(!hPrevInstance)
  51.     {
  52.         wndclass.style        =CS_HREDRAW|CS_VREDRAW;
  53.         wndclass.lpfnWndProc  =WndProc;
  54.         wndclass.cbClsExtra   =0;
  55.         wndclass.cbWndExtra   =0;
  56.         wndclass.hInstance    =hInstance;
  57.         wndclass.hIcon        =LoadIcon(NULL,IDI_APPLICATION);
  58.         wndclass.hCursor      =LoadCursor(NULL,IDC_ARROW);
  59.         wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
  60.         wndclass.lpszMenuName =NULL;
  61.         wndclass.lpszClassName=szAppName;
  62.         RegisterClass (&wndclass) ;
  63.     }
  64.     hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
  65.         CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
  66.  
  67.     ShowWindow(hwnd,nCmdShow);
  68.     UpdateWindow(hwnd);
  69.  
  70.     while(GetMessage(&msg,NULL,0,0))
  71.     {
  72.         TranslateMessage(&msg);
  73.         DispatchMessage (&msg);
  74.     }
  75.  
  76.     CloseWinsock();
  77.  
  78.     return(msg.wParam);
  79. }
  80.  
  81. long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
  82. {
  83.      static HWND hwndButton[64];
  84.      char sa[8];
  85.      int i;
  86.  
  87.      switch(message)
  88.      {
  89.         case WM_CREATE:
  90.         /*
  91.             for(i=0;i<64;i++)
  92.             {
  93.                 wsprintf(sa,"%02u",i);
  94.                 hwndButton[i]=CreateWindow("button",sa,
  95.                     WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
  96.                     hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
  97.             }
  98. */
  99.             PostMessage(hwnd,WM_COMMAND,0,0);
  100.             return(0);
  101.  
  102.         case WM_SIZE:
  103.             break;
  104.  
  105.         case WM_PAINT:
  106.             break;
  107.  
  108.         case WM_COMMAND:
  109.             BodyWinsock();
  110.             PostQuitMessage(0);
  111.  
  112.  
  113.         /*
  114.             switch(wParam)
  115.             {
  116.             }
  117.             as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
  118.         */
  119.             return(0);
  120.  
  121.         case WM_DRAWITEM:
  122.             break;
  123.  
  124.         case WM_DESTROY:
  125.             PostQuitMessage(0);
  126.             return(0);
  127.     }
  128.     return DefWindowProc(hwnd,message,wParam,lParam);
  129. }
  130.  
  131. unsigned char OpenWinsock ( void )
  132. {
  133.     unsigned char gstring[80];
  134.     int ia;
  135.     HOSTENT *host;
  136.  
  137.     if(WSAStartup(0x0101,&wsaData))
  138.     {
  139.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  140.         return(1);
  141.     }
  142.  
  143.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
  144.     {
  145.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  146.         WSACleanup();
  147.         return(1);
  148.     }
  149.     wsaData.wVersion=0x0101;
  150.     wsaData.wHighVersion=0x0101;
  151.  
  152.     ia=gethostname(gstring,80);
  153.     if(ia)
  154.     {
  155.         SocketError("gethostname error",WSAGetLastError());
  156.     }
  157.     else
  158.     {
  159. //        MessageBox(NULL,gstring,"gethostname SUCCESS",MB_OK);
  160.         host=gethostbyname(gstring);
  161.         if(host==NULL)
  162.         {
  163.             SocketError("gethostbyname error",WSAGetLastError());
  164.             return(1);
  165.         }
  166.         else
  167.         {
  168.             if(host[0].h_addrtype!=2)
  169.             {
  170.                 MessageBox(NULL,"Unknown addres type",appname,MB_OK);
  171.                 return(1);
  172.             }
  173.             if(host[0].h_length!=4)
  174.             {
  175.                 MessageBox(NULL,"Unknown address length",appname,MB_OK);
  176.                 return(1);
  177.             }
  178.             wsprintf(appname,"%s %u.%u.%u.%u S",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
  179. //            MessageBox(NULL,appname,"gethostbyname SUCCESS",MB_OK);
  180.         }
  181.     }
  182.  
  183.     return(0);
  184. }
  185.  
  186. unsigned char BodyWinsock ( void )
  187. {
  188.     unsigned char gstring[80];
  189.     SOCKET sock;
  190.     int ia;
  191.     SOCKADDR_IN sin;
  192.     SOCKADDR s;
  193.  
  194.     sock=socket(PF_INET,SOCK_DGRAM,0);
  195.     if(sock==INVALID_SOCKET)
  196.     {
  197.         SocketError("socket error",WSAGetLastError());
  198.         return(1);
  199.     }
  200.  
  201. // select() to check status before sending another
  202. /*    ia=sendto(sock,gstring,20,MSG_DONTROUTE,(LPSOCKADDR)&sin,sizeof(sin)); */
  203.  
  204.     wsprintf(gstring,"%s","HELLO THERE");
  205.  
  206.     sin.sin_family=AF_INET;
  207.     sin.sin_addr.s_net  =192;
  208.     sin.sin_addr.s_host =9;
  209.     sin.sin_addr.s_lh   =200;
  210.     sin.sin_addr.s_impno=6;
  211.  
  212.     s.sa_family=AF_INET;
  213.     s.sa_data[2]=192;
  214.     s.sa_data[3]=9;
  215.     s.sa_data[4]=200;
  216.     s.sa_data[5]=6;
  217.  
  218. /*
  219.     ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
  220.     if(ia)
  221.     {
  222.         SocketError("connect error",WSAGetLastError());
  223.     }
  224.  
  225.     ia=send(sock,gstring,20,MSG_DONTROUTE);
  226. */
  227. /*  ia=sendto(sock,gstring,20,0,(LPSOCKADDR)&sin,sizeof(sin));*/
  228.     ia=sendto(sock,gstring,20,MSG_DONTROUTE,&s,sizeof(s));
  229.  
  230.  
  231.     if(ia!=20)
  232.     {
  233.         SocketError("sendto error",WSAGetLastError());
  234.     }
  235.  
  236.     closesocket(sock);
  237.  
  238. }
  239.  
  240. void CloseWinsock ( void )
  241. {
  242.     WSACleanup();
  243. }
  244. ----cut----
  245. ----cut----
  246.  
  247.  
  248. //GetProfileString()
  249.  
  250. #include <windows.h>
  251. #define _INC_WINDOWS
  252. #include <winsock.h>
  253.  
  254. WSADATA wsaData;
  255.  
  256. void SocketError ( char *,int );
  257. long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
  258. unsigned char OpenWinsock ( void );
  259. unsigned char BodyWinsock ( void );
  260. void CloseWinsock ( void );
  261. char appname[40];
  262.  
  263. int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
  264.     int nCmdShow)
  265. {
  266.     static char szAppName[]="sock";
  267.     HWND hwnd;
  268.     MSG msg;
  269.     WNDCLASS wndclass;
  270.  
  271.     if(OpenWinsock()) return(0);
  272.  
  273.     if(!hPrevInstance)
  274.     {
  275.         wndclass.style        =CS_HREDRAW|CS_VREDRAW;
  276.         wndclass.lpfnWndProc  =WndProc;
  277.         wndclass.cbClsExtra   =0;
  278.         wndclass.cbWndExtra   =0;
  279.         wndclass.hInstance    =hInstance;
  280.         wndclass.hIcon        =LoadIcon(NULL,IDI_APPLICATION);
  281.         wndclass.hCursor      =LoadCursor(NULL,IDC_ARROW);
  282.         wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
  283.         wndclass.lpszMenuName =NULL;
  284.         wndclass.lpszClassName=szAppName;
  285.         RegisterClass (&wndclass) ;
  286.     }
  287.     hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
  288.         CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
  289.  
  290.     ShowWindow(hwnd,nCmdShow);
  291.     UpdateWindow(hwnd);
  292.  
  293.     while(GetMessage(&msg,NULL,0,0))
  294.     {
  295.         TranslateMessage(&msg);
  296.         DispatchMessage (&msg);
  297.     }
  298.  
  299.     CloseWinsock();
  300.  
  301.     return(msg.wParam);
  302. }
  303.  
  304. long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
  305. {
  306.      static HWND hwndButton[64];
  307.      char sa[8];
  308.      int i;
  309.  
  310.      switch(message)
  311.      {
  312.         case WM_CREATE:
  313. /*
  314.             for(i=0;i<64;i++)
  315.             {
  316.                 wsprintf(sa,"%02u",i);
  317.                 hwndButton[i]=CreateWindow("button",sa,
  318.                     WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
  319.                     hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
  320.             }
  321. */
  322.             PostMessage(hwnd,WM_COMMAND,0,0);
  323.             return(0);
  324.  
  325.         case WM_SIZE:
  326.             break;
  327.  
  328.         case WM_PAINT:
  329.             break;
  330.  
  331.         case WM_COMMAND:
  332.             BodyWinsock();
  333.             PostQuitMessage(0);
  334.  
  335.  
  336.         /*
  337.             switch(wParam)
  338.             {
  339.             }
  340.             as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
  341.         */
  342.             return(0);
  343.  
  344.         case WM_DRAWITEM:
  345.             break;
  346.  
  347.         case WM_DESTROY:
  348.             PostQuitMessage(0);
  349.             return(0);
  350.     }
  351.     return DefWindowProc(hwnd,message,wParam,lParam);
  352. }
  353.  
  354. unsigned char OpenWinsock ( void )
  355. {
  356.     unsigned char gstring[80];
  357.     int ia;
  358.     HOSTENT *host;
  359.  
  360.     if(WSAStartup(0x0101,&wsaData))
  361.     {
  362.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  363.         return(1);
  364.     }
  365.  
  366.     if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
  367.     {
  368.         MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
  369.         WSACleanup();
  370.         return(1);
  371.     }
  372.     wsaData.wVersion=0x0101;
  373.     wsaData.wHighVersion=0x0101;
  374.  
  375.     ia=gethostname(gstring,80);
  376.     if(ia)
  377.     {
  378.         SocketError("gethostname error",WSAGetLastError());
  379.     }
  380.     else
  381.     {
  382.         host=gethostbyname(gstring);
  383.         if(host==NULL)
  384.         {
  385.             SocketError("gethostbyname error",WSAGetLastError());
  386.             return(1);
  387.         }
  388.         else
  389.         {
  390.             if(host[0].h_addrtype!=2)
  391.             {
  392.                 MessageBox(NULL,"Unknown addres type",appname,MB_OK);
  393.                 return(1);
  394.             }
  395.             if(host[0].h_length!=4)
  396.             {
  397.                 MessageBox(NULL,"Unknown address length",appname,MB_OK);
  398.                 return(1);
  399.             }
  400.             wsprintf(appname,"%s %u.%u.%u.%u R",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
  401.         }
  402.     }
  403.     return(0);
  404. }
  405.  
  406. unsigned char BodyWinsock ( void )
  407. {
  408.     unsigned char gstring[80];
  409.     SOCKET sock;
  410.     int ia;
  411.     SOCKADDR s;
  412.     int ss;
  413.  
  414.     sock=socket(PF_INET,SOCK_DGRAM,0);
  415.     if(sock==INVALID_SOCKET)
  416.     {
  417.         SocketError("socket error",WSAGetLastError());
  418.         return(1);
  419.     }
  420.  
  421. // select() to check status before sending another
  422.  
  423. /*
  424.     ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
  425.     if(ia)
  426.     {
  427.         SocketError("connect error",WSAGetLastError());
  428.     }
  429.  
  430.     ia=recv(sock,gstring,20,0);
  431. */
  432.     ia=recvfrom(sock,gstring,20,0,&s,&ss);
  433.     if(ia==SOCKET_ERROR)
  434.     {
  435.         SocketError("recv error",WSAGetLastError());
  436.     }
  437.     else
  438.     {
  439.         MessageBox(NULL,gstring,"SUCCESS",MB_OK);
  440.     }
  441.  
  442.     closesocket(sock);
  443.  
  444. }
  445.  
  446. void CloseWinsock ( void )
  447. {
  448.     WSACleanup();
  449. }
  450. ---- cut ----
  451. ---- cut ----
  452.  
  453. #include <windows.h>
  454. #include <winsock.h>
  455.  
  456.  
  457. void SocketError ( char *s,int e )
  458. {
  459.     char hello[80];
  460.     switch(e)
  461.     {
  462.         case WSAEINTR:   MessageBox(NULL,"WSAEINTR",s,MB_OK); break;
  463.         case WSAEBADF:   MessageBox(NULL,"WSAEBADF",s,MB_OK); break;
  464.         case WSAEACCES:   MessageBox(NULL,"WSAEACCESS",s,MB_OK); break;
  465.         case WSAEFAULT:   MessageBox(NULL,"WSAEFAULT",s,MB_OK); break;
  466.         case WSAEINVAL:   MessageBox(NULL,"WSAEINVAL",s,MB_OK); break;
  467.         case WSAEMFILE:   MessageBox(NULL,"WSAEMFILE",s,MB_OK); break;
  468.         case WSAEWOULDBLOCK:   MessageBox(NULL,"WSAEWOULDBLOCK",s,MB_OK); break;
  469.         case WSAEINPROGRESS:   MessageBox(NULL,"WSAEINPROGRESS",s,MB_OK); break;
  470.         case WSAEALREADY:   MessageBox(NULL,"WSAEALREADY",s,MB_OK); break;
  471.         case WSAENOTSOCK:   MessageBox(NULL,"WSAENOTSOCK",s,MB_OK); break;
  472.         case WSAEDESTADDRREQ:   MessageBox(NULL,"WSAEDESTADDRREQ",s,MB_OK); break;
  473.         case WSAEMSGSIZE:   MessageBox(NULL,"WSAEMSGSIZE",s,MB_OK); break;
  474.         case WSAEPROTOTYPE:   MessageBox(NULL,"WSAEPROTOTYPE",s,MB_OK); break;
  475.         case WSAENOPROTOOPT:   MessageBox(NULL,"WSAENOPROTOOPT",s,MB_OK); break;
  476.         case WSAEPROTONOSUPPORT:   MessageBox(NULL,"WSAEPROTONOSUPPORT",s,MB_OK); break;
  477.         case WSAESOCKTNOSUPPORT:   MessageBox(NULL,"WSAESOCKTNOSUPPORT",s,MB_OK); break;
  478.         case WSAEOPNOTSUPP:   MessageBox(NULL,"WSAEOPNOTSUPP",s,MB_OK); break;
  479.         case WSAEPFNOSUPPORT:   MessageBox(NULL,"WSAEPFNOSUPPORT",s,MB_OK); break;
  480.         case WSAEAFNOSUPPORT:   MessageBox(NULL,"WSAEAFNOSUPPORT",s,MB_OK); break;
  481.         case WSAEADDRINUSE:   MessageBox(NULL,"WSAEADDRINUSE",s,MB_OK); break;
  482.         case WSAEADDRNOTAVAIL:   MessageBox(NULL,"WSAEADDRNOTAVAIL",s,MB_OK); break;
  483.         case WSAENETDOWN:   MessageBox(NULL,"WSAENETDOWN",s,MB_OK); break;
  484.         case WSAENETUNREACH:   MessageBox(NULL,"WSAENETUNREACH",s,MB_OK); break;
  485.         case WSAENETRESET:   MessageBox(NULL,"WSAENETRESET",s,MB_OK); break;
  486.         case WSAECONNABORTED:   MessageBox(NULL,"WSAECONNABORTED",s,MB_OK); break;
  487.         case WSAECONNRESET:   MessageBox(NULL,"WSAECONNRESET",s,MB_OK); break;
  488.         case WSAENOBUFS:   MessageBox(NULL,"WSAENOBUFS",s,MB_OK); break;
  489.         case WSAEISCONN:   MessageBox(NULL,"WSAEISCONN",s,MB_OK); break;
  490.         case WSAENOTCONN:   MessageBox(NULL,"WSAENOTCONN",s,MB_OK); break;
  491.         case WSAESHUTDOWN:   MessageBox(NULL,"WSAESHUTDOWN",s,MB_OK); break;
  492.         case WSAETOOMANYREFS:   MessageBox(NULL,"WSAETOOMANYREFS",s,MB_OK); break;
  493.         case WSAETIMEDOUT:   MessageBox(NULL,"WSAETIMEDOUT",s,MB_OK); break;
  494.         case WSAECONNREFUSED:   MessageBox(NULL,"WSAECONNREFUSED",s,MB_OK); break;
  495.         case WSAELOOP:   MessageBox(NULL,"WSAELOOP",s,MB_OK); break;
  496.         case WSAENAMETOOLONG:   MessageBox(NULL,"WSAENAMETOOLONG",s,MB_OK); break;
  497.         case WSAEHOSTDOWN:   MessageBox(NULL,"WSAEHOSTDOWN",s,MB_OK); break;
  498.         case WSAEHOSTUNREACH:   MessageBox(NULL,"WSAEHOSTUNREACH",s,MB_OK); break;
  499.         case WSAENOTEMPTY:   MessageBox(NULL,"WSAENOTEMPTY",s,MB_OK); break;
  500.         case WSAEPROCLIM:   MessageBox(NULL,"WSAEPROCLIM",s,MB_OK); break;
  501.         case WSAEUSERS:   MessageBox(NULL,"WSAEUSERS",s,MB_OK); break;
  502.         case WSAEDQUOT:   MessageBox(NULL,"WSAEDQUIT",s,MB_OK); break;
  503.         case WSAESTALE:   MessageBox(NULL,"WSAESTALE",s,MB_OK); break;
  504.         case WSAEREMOTE:   MessageBox(NULL,"WSAEREMOTE",s,MB_OK); break;
  505.         case WSAEDISCON:   MessageBox(NULL,"WSAEDISCON",s,MB_OK); break;
  506.         case WSASYSNOTREADY:   MessageBox(NULL,"WSAESYSNOTREADY",s,MB_OK); break;
  507.         case WSAVERNOTSUPPORTED:   MessageBox(NULL,"WSAVERNOTSUPPORTED",s,MB_OK); break;
  508.         case WSANOTINITIALISED:   MessageBox(NULL,"WSANOTINITIALISED",s,MB_OK); break;
  509.         case WSAHOST_NOT_FOUND:   MessageBox(NULL,"WSAHOST_NOT_FOUND",s,MB_OK); break;
  510.         case WSATRY_AGAIN:   MessageBox(NULL,"WSATRY_AGAIN",s,MB_OK); break;
  511.         case WSANO_RECOVERY:   MessageBox(NULL,"WSANO_RECOVERY",s,MB_OK); break;
  512.         case WSANO_DATA:   MessageBox(NULL,"WSANO_DATA",s,MB_OK); break;
  513.         default: wsprintf(hello,"Unknown error %d",e);
  514.         MessageBox(NULL,hello,s,MB_OK); break;
  515.     }
  516. }
  517. ---- cut ----
  518.